Ну и разделить поиск файлов на потоки... Нпример количество_ядер-1, каждому потоку свою папку для разбора, как только поток заканчиваем давить другую папку. Результаты выполнения каждого потока уже после собирать
Логично предположить, что для HDD-дисков нужно работать с диском в один поток, иначе головки будут постоянно дергаться между дорожками и производительность просядет.