Comprueba cuántos data-atributos y clases le estás agregando a cada elemento de la lista. A menudo los problemas de rendimiento no vienen de la cantidad de nodos DOM, sino de que el navegador recalcula constantemente los estilos y el diseño debido a cambios de clases al hacer scroll. Si dinámicamente agregas clases para elementos activos o al pasar el cursor, eso puede convertirse en un cuello de botella. Intenta mover eso a CSS usando `nth-child` o una capa separada con `position: fixed` para que el navegador no afecte la lista principal.
Segundo: asegúrate de que no estés creando objetos nuevos en las props en cada renderizado. Por ejemplo, si pasas `style={{ color: item.color }}` en lugar de un valor precalculado, React verá objetos diferentes y volverá a renderizar el componente. Incluso con memoización esto puede ralentizar. Es mejor preparar los estilos de antemano o usar variables CSS.
Y otra cosa más: si tienes miles de elementos en la lista, incluso la virtualización puede ser lenta si estás creando demasiados nodos DOM dentro de la ventana visible a la vez. Intenta reducir la cantidad de filas que se renderizan de una sola vez - muestra solo la parte visible más un pequeño buffer arriba y abajo. En la mayoría de las bibliotecas de virtualización se configura esto mediante un parámetro como `overscanRowCount`.