Вероятно, истекло время, потому что вы помещаете 800 тысяч записей в ViewState (они должны быть сериализованы и отправлены по проводам клиенту. Безумно!). Я могу представить, насколько «маленькая» ваша страница.
Я бы не поместил 800 тысяч записей в ViewState или даже в Cache или Session. Вы можете положить меньшую сумму, если хотите избежать обращения к базе данных и определить, есть ли у вас записи в памяти или нет. Если нет, вы можете получить следующий большой кусок (скажем, 500) и так далее.
Если вы помещаете более мелкие блоки, вам лучше поместить их в Cache (или Session) и получать их оттуда вместо ViewState. В случае сеанса в режиме InProc вам не придется беспокоиться о сериализации данных; аналогично для Cache.