Dass das ListView so lahm ist, liegt auch stark an Delphis extrem schlechter Umsetzung der TSubItems mit einem TStrings-Erben.
Ich hab mir mal irgendwann einen TListItem-Erben geschrieben und einen dazugehörigen TSubItems-Erben, der alle Schreibzugriffe direkt an Windows weitergibt ohne sie selbst zu speichern. Man kann zwar nicht mehr lesend auf TListItem.SubItems.Strings[] zugreifen (braucht man oft auch nicht, könnte man aber threoretisch auch über
WinAPI-Calls realisieren), dafür läuft das um ein Vielfaches schneller.
Falls da Interesse besteht, kann ich das mal hochladen. Eine brauchbare Lösung zu TListGroups fehlt mir aber noch.