Verwende den 'virtual mode' vom TListView. Dann musst Du das ListView nicht mehr füllen. Das LV holt sich die Daten über das Event "OnGetData" (oder so) selbst.
Ich glaube, Du musst 'OwnerDraw' setzen irgendwie, und dann noch das o.g. Event implementieren und LV.Items.Count auf 1000000 setzen, z.B.
Wupps, in 0.1 Sekunden ist alles da.
Das Bild hängt schief.