Middle и senior js, поможешь как оптимизировать неоптимизируемое в js?
Никто не рендерит все ячейки сразу.
Рендерить достаточно только видимую область(а она уж точно не на 50к ячеек).
И тогда все будет летать на любых данных.
Так работают все коммерческие(и не только) более менее хорошие библиотеки.
Ну я хоть не сеньёрь и даже не мидл, но подход у вас совершенно не правильный.
Как уже упомянул Александр Аксентьев рендерить нужно только видимые ячейки, но на 50000 только этого будет недостаточно.
Вам нужно организовать пулл dom элементов (генерим сразу максимальное число ячкеек которое влезает в экран и сразу вставляем их в dom). После только менять x,y позиции ячеек при прокрутке и сами текстовые данные внутри них.
То есть при прокручивании таблицы, вынимаем уже созданные ячейки из пула и расставляем их по необходимым координатам в строке, которая сейчас попадает в видимую область экрана. 
Задача сильно упрощается, если размер ячеек фиксированный.Я использую шаблонизатор lodash 
На 50000 любая либа даст тормоза. Обрабатываем только ручками. В вашем случае не до удобства.