Welche Zeichencodierung verwendest Du?
Substr() ist nur für einbytige Codierungen gedacht.
ich nutze UTF-8 als Codierung. Ist die Abfrage denn so wie sie ist optimal?
Nein, wenn Du nur die ersten 255 Zeichen ausgeben möchtest, dann lass die Datenbank auch nur diese Zeichen zurückliefern (siehe MySQL SUBSTRING).