Вы можете добавить сохраненный процесс, который будет возвращать только диапазон строк. Сделайте так, чтобы страница отслеживала текущую страницу, на которой вы находитесь, и запрашивайте только следующие x или предыдущие x строк.
например:
@firstRow int,
@lastRow int
select ROW_NUMBER() over (order by [MyField]) as rowNum, *
from [MyTable]
where rowNum between @firstRow and @lastRow