The time to open a file is hard to predict. FAT directories are not ordered so open must do a linear search. Unused directory entries are scattered in the directory.
There is no simple way with SD.h to open files fast when you have 600 or more in a directory.
I would create a large contiguous file and place all the images in this file with each image in a fixed size record. I would then read the records using the raw SD read functions in SD fat.
Here is how raw read/write works. Acessing SD card without using Sd.h - #6 by fat16lib - Storage - Arduino Forum.
SdFat has a function to create a contiguous file.
bool SdBaseFile::createContiguous ( SdBaseFile * dirFile,
const char * path,
uint32_t size
)Create and open a new contiguous file of a specified size.
Parameters:
[in] dirFile The directory where the file will be created.
[in] path A path with a valid DOS 8.3 file name.
[in] size The desired file size.
There is also a function to find the location to the file.
bool SdBaseFile::contiguousRange ( uint32_t * bgnBlock,
uint32_t * endBlock
)Check for contiguous file and return its raw block range.
Parameters:
[out] bgnBlock the first block address for the file.
[out] endBlock the last block address for the file.