Wow,
alles so Bunt hier *augenwisch*
Aber zu deiner Frage:
Wieviel der Zeit geht denn Wiklich beim suchen der Dateien verloren und wieviel beim eintragen in den Baum?
1. Benutzt du BeginUpdate/EndUpdate beim Baum füllen?
2. Hast du dir schon mal
VirtualTreeView angeschaut? Der ist erheblich schneller als der "standart Tree"
Ich habe vor kurzen mal unter Kylix ein Verzeichnisgrößenermittelprogramm geschrieben. Dieses Zeigt auch den VErzeichnisbaum an. Um schon einen groben überblich zu bekommen bevor dieser komplett eingelesen ist habe ich erst alle Dateien und Verzeichnisse im aktuellen Verzeichnis angezeigt und erst danach habe ich den Nächsten rekursionsschrit gemacht (also nciht schon beim finden des Verzeichnisses). Vieleicht hilft diese Taktik auch bei deinem Problem.
Wenn ich so richtig drüber nachdenke währe bei dir eine Rekursion bei bedarf sowiso geeigneter. Du leiset die aktuelle Verzeichnisebene ein und stellst sie dar. Wenn nur ein Knoten aufgeklappt wird liest du die nächste ebene ein.
Vorteil: Keine lange startzeit.
Nachteil: Du must unterstellen, das jedes Verzeichnis auch Kindverzeichnisse hat (ein Plus Symbol davor einblenden).
Den nachteil kannst du vieleicht umgehen wenn du eine Ebene (und eben nur eine) im voraus liest.
So, das war jetzt mitsicherheit nicht die Universallösung aber ich hoffe du kannst den einen oder anderen Denkanstoß entnehmen

.
Machst gut
Klabautermann