Although this answer may be a little unmanageable and boring, I would go with your suggestion of asynchronously loading thumbnails (and, of course, the main image) if they appear. A similar method is used by Google+ in the panel to add people to circles. Thus, you save server resources and bandwidth on the images that the client needs. According to Google+, operations with the DOM tree are quite fast and do not slow down the computer of past years.
You can also pre-create several rows of the thumbnail table in front with a dummy image (for example, a "loading circle" animated gif) and replace the image. Thus, the existing table is already built and does not need to be retransmitted, since the flow elements following the table would have to be if there were no images during scrolling.
Instead of breaking down into thumbnails (as suggested by your layout scheme), you can also think about letting users filter images by tag, subject, category, size, or in any other way to quickly find their results.
source share