Aus Verlegenheit hatte ich die komplexere Match-Bedingung des ersten Schritts gegen einen einfachen Pfadselektor ausgewechselt, also das....
match="text()[current() is ancestor::title[1]/(descendant::text())[1]]"Plain Text
... gegen das ...
match="title/(descendant::text())[1]"Plain Text
... ersetzt.
Ansonsten performt die Lösung auch bei mehreren Tausend Titeln in Sekundenbruchteilen.