Как часто вы выполняете 2000 одинаковых запросов? Это чисто синтетический тест, который ничего не показывает.
Вообще говоря, гораздо проще (и с меньшими затратами) бросить больше оборудования на проблему (добавить больше дешевой оперативной памяти на компьютер с SQL Server), чем тратить тысячи долларов и сотни человеко-часов, пытаясь устранить все ошибки в
var dataReader = command.ExecuteReader();
while(dataReader.Read())
var id = dataReader.GetInt32("ID");
Конечно, иногда нужно прибегнуть к простому ADO.NET для повышения производительности, но это следует делать только тогда, когда профилировщик показывает проблему.