При загрузке изображения к материалу вы, помимо основных манипуляций, таких как создание миниатюр, обрезание, переконвертирование, создаете еще одну миниатюру, очень мелкую, например с шириной стороны 64 пикселя, конвертируя это все в jpg, после чего получившийся файл сохраняете в base64 и храните в базе вместе с основной информацией.
Это позволяет вам встроить эту миниатюру непосредственно в html-страницу в момент отдачи.
Вставляете ее прямо в тэг через style="background-image: url(base64...)", а через внешний css растягиваете на весь элемент, ну и еще можно блур вкорячить.
В итоге у вас моментально после загрузки страницы не пустые места, а некий размытый силуэт изображения. А после того, как основная картинка загрузится - встанет поверх.