Проверь, сколько data-атрибутов и классов ты вешаешь на каждый элемент списка. Часто лаги идут не от количества DOM-узлов, а от того, что браузер постоянно пересчитывает стили и макет из-за изменений классов при скролле. Если ты динамически добавляешь классы для активного элемента или наведения, это может стать узким местом. Попробуй переместить это в CSS с использованием `nth-child` или отдельного слоя через `position: fixed`, чтобы браузер не трогал основной список.
Второй момент - убедись, что ты не создаёшь новые объекты в пропсах при каждом рендере. Например, если передаёшь `style={{ color: item.color }}` вместо предвычисленного значения, React будет видеть разные объекты и пересчитывать компонент. Даже с мемоизацией это может замедлить. Лучше подготовить стили заранее или использовать CSS-переменные.
И ещё: если в списке тысячи элементов, даже виртуализация может быть медленной, если ты создаёшь слишком много DOM-узлов в окне видимости одновременно. Попробуй уменьшить количество отрисовываемых строк за раз - показывай только видимую часть плюс небольшой буфер выше и ниже. В большинстве библиотек виртуализации это настраивается через параметр вроде `overscanRowCount`.