Хотя этот ответ может быть немного не радикальным и скучным, я бы согласился с вашим предложением об асинхронной загрузке миниатюр (и, конечно, основного изображения), если они появляются. Подобная техника используется Google+ на панели для добавления людей в круги. Таким образом вы сохраняете ресурсы сервера и пропускную способность для изображений, которые необходимы клиенту. Как показывает Google+, операции с деревом DOM выполняются достаточно быстро и не замедляют работу компьютеров последних лет.
Вы также можете предварительно скомпилировать несколько строк таблицы миниатюр впереди с фиктивным изображением (например, анимированным GIF "круг загрузки") и заменить изображение. Таким образом, рассматриваемая таблица уже построена и ее не нужно перерисовывать, поскольку элементы потока, следующие за таблицей, должны были бы быть, если во время прокрутки там не было изображений.
Вместо того, чтобы разбивать миниатюры на страницы (как это предусмотрено схемой компоновки), вы также можете подумать о том, чтобы позволить пользователям фильтровать изображения по тегу, теме, категории, размеру или любым другим способом, чтобы быстрее находить их результаты.