Быстрее всего будет работать вариант, когда имена файлов изображений хранятся непосредственно в таблице "лот" - чтобы JOIN вообще не было. Будет ли это 10 полей типа VARCHAR, или одно поле, хранящее сериализованный массив - не принципиально.
Но хранить, разумеется, надо именно имена файлов, а не сами файлы.
@kaasius прав в том, что картинки надо раскидывать по множеству папок. Но должно быть 2 уровня папок, а не один и в механизме распределения он ошибается. Раскидывать надо не по id, а случайным образом. Например, взять md5(uniqid($id_лота, true)) и первые 3 символа использовать в качестве имени папки, а следующие 3 - в качестве имени подпапки. Получится что-то вроде /images/48e/da3/имя_файла.