Verifica quantos data-atributos e classes tu colocas em cada elemento da lista. Frequentemente os travamentos não vêm da quantidade de nós DOM, mas do fato de o navegador ficar recalculando estilos e layout por causa das mudanças de classes durante o scroll. Se tu adiciona classes dinamicamente para o elemento ativo ou hover, isso pode virar um gargalo. Tenta mover isso para CSS usando `nth-child` ou uma camada separada através de `position: fixed`, pra o navegador não mexer na lista principal.
Segundo ponto - garante que tu não está criando novos objetos nos props a cada renderização. Por exemplo, se tu passa `style={{ color: item.color }}` em vez de um valor pré-calculado, React vai ver objetos diferentes e vai re-renderizar o componente. Mesmo com memoização isso pode desacelerar. Melhor preparar os estilos com antecedência ou usar variáveis CSS.
E mais uma coisa: se a lista tem milhares de elementos, até mesmo virtualização pode ficar lenta se tu cria muitos nós DOM na viewport ao mesmo tempo. Tenta reduzir a quantidade de linhas renderizadas de uma vez - mostra só a parte visível mais um pequeno buffer acima e abaixo. Na maioria das bibliotecas de virtualização isso se configura através de um parâmetro tipo `overscanRowCount`.