а еще лучше сделать менеджер файлов. Чтобы они все где-то кешировались, и не обращались каждый раз к файловой системе. например в memcached закинуть массив с файлами, и при обновлении файлов обновлять и в memcached'e. И для выборки вам не нужно будет заново сканировать директорию, а просто вытащить массив из кеша и выбрать случайный элемент. Это будет еще быстрее. Либо хранить в бд, и тоже самое делать через ф-ии субд.
Как раз усложнять кэшированием и базой не хотелось на данном этапе. То есть я правильно понимаю, что список файлов мы получаем последовательным перебором всех элементов в каталоге? То есть в операционной системе нет готового списка файлов в папке