Hallo,
kein Mensch kann die Ausgabe von 28.000 Informationszeilen verarbeiten. Das überfordert jeden Geist. Wenn diese Informationsfülle zur Verfügung steht, muss die Anwendung eben das Ergebnis einschränken, bei einem Baum eben, in dem er Zweige öffnet oder schließt. Du kannst das ganze ja noch mit einer Suche oder Shortcuts verknüpfen. Dazu gleich mehr.
Erstmal musst du den Code verschlanken.
Redundanzen entfernen. In deinem Fall ist das CSS. Das musst du auslagern.
Beim <img> Tag kannst du border="0" auch weglassen, dafür reicht ein einziger CSS-Befehl img { border:0 }
Der Quellcode muss für den Menschen bei einer solchen Größe nicht lesbar sein, das heißt du kannst auf solche Bezeichnungen zugunsten kürzerer verzichten: "fbDivDeBR". Auf Whitespaces (dazu zählt auch das Einrücken von Code) sowieso!
Komprimier die Datei, kann dir unglaublich viel bringen. Dazu lies den Wert aus $_SERVER["HTTP_ACCEPT_ENCODING"] aus, wird darin "gzip" aufgeführt, akzeptiert der Browser gzip-komprimierte Ausgaben. Kannst du ganz einfach umsetzen, näheres hier:
http://de2.php.net/manual/en/function.ob-gzhandler.php
Wie erwähnt, der Benutzer will und kann garnicht alle Informationen verarbeiten. Stell dir vor im Windows Explorer wären alle Ordner gleich ausgeklappt. Da findest du nix mehr. Setz AJAX ein und zeig immer nur eine Ordner-Ebene an. Das macht das ganze garantiert angenehmer für den Benutzer.
Bau vielleicht eine Suche oder Shortcut-Möglichkeit ein. Wenn jemand "Baudienstleistungen" sucht, sollte deine Applikation in der Lage sein, alle Bäume aufzuklappen, in denen dieser Begriff vorkommt. Ist knifflig, aber machbar. Shortcuts könntest du wie die Transaktionsnummern bei SAP R/3 machen. Gib einfach eine gültige Transkationsnummer ein und der entsprechende Unterbaum öffnet sich. In deinem Fall wäre das die ID ("fbLnkDeBR21", ..). Kannst ja auch über Lesezeichen nachdenken.