mdewyer:
The database can't do the logic of "there's 30 items, and 3 per page, but on page 5, 7, and 8 there will only be 2 products since the images are wider, so that makes it 9 pages rather than 10".
You're correct. Even if you were to add a field to the database to indicate that an image was bigger, it still doesn't solve the issue of determining the paging. The problem lies in the fact that a larger image would take the space of two products. So, if you pull three items and one has a larger image, it will be taking up a total of four widths, rather than three. And, if you'd hide one of the smaller images on that page (so you get to the needed three widths), then the database offset for the next page would be off, and the hidden product would not be displayed on the following page.
This is not an issue with ZenCart, but rather a limitation of what's possible with paging based off a database, like you explained. You can't, in a query, look at what you're about too pull and if one of the items has a larger image, only pull two, and still keep the paging intact, because the paging is going off of the fact that there are supposed to be three items per page, not three sometimes, and two other times. It throws the whole paging logic out of sync.
Sorry, but I think you're going to have to tell the client that it's not feasible.