Связывание с данными 50k строк займет некоторое время. Сначала я бы посмотрел на уменьшение объема данных (что любой пользователь на самом деле собирается сделать с 50k строк). Но в остальном: «виртуальный режим» ( что | как ).
Edit; Я подозреваю, что большую часть времени тратится на создание таких объектов, как построение управляющих деревьев и других структур, но может быть причиной того, что основанный на отражении доступ к членам замедляет это; если это так, возможно, HyperDescriptor может помочь (просто добавив вызов в одну строку в коде, чтобы включить его для связанного типа).