One thing you can try is to preload the images. This would cache the images so they don't have to load and the images wouldn't cause the layout to show up and then change.
As for the different amount of columns for the different screen size, as Craig said, the size of the monitor doesn't determine the resolution that the browser is being displayed at. You would want to get the browser width and display a certain number of rows depending on that. This would have to be something you'd implement on your own though, since it would require custom coding to achieve.