If you are running on Windows 7 or Server 2008 R2, I recommend extracting the FindFirst and FindMatchingFile functions from SysUtils and hacking the former to use FindFirstFileEx instead of FindFirstFile. Then you can set the additional flags parameter to 2 (defined in MSDN as FIND_FIRST_EX_LARGE_FETCH
) with this setting conditioned on (Win32majorversion = 6) and (Win32minorversion >= 1), for the time being.
This setting produces a very significant speed increase for FindFirst/FindNext loops on these OS. Look for FindFirstFileEx on MSDN for more details, as the latest documentation is not in the Microsoft documentation retrieved by Delphi help.
TDirectory.GetFiles eventually seems to call FindFirst, so will not buy you much advantage other than simplifying your own code.