Ich hab das nur überflogen. Meine erste Idee bei Linked Servern (ich kenne das bei MS nur sehr minimal aus der Praxis, ich habe das mit verschiedenen Oracle Versionen gehabt) ist folgender Gedanke, der vermutlich allgemeingültig ist.
Die Verlinkung bringt die Optimizer ins Schwimmen, nicht grundsätzlich, aber sehr viel eher als bei einem Single System.
Du musst einen Weg finden, die Where Bedingung zu "vereinfachen".
Das können z.B. Materialized Views sein (im Zielsystem). Ausprobieren.
Das können aber z.B. auch Views sein, die auf den Linked System liegen und vorfiltern- so viel wie geht und so simple, dass nicht wieder der Effekt eintritt. Bspw. in der Linked Quelle einen View anlegen, der die Basistabelle auf den benötigten, maximalen Zeitraum einschränkt. Also biete schon auf Remoteseite nur die letzten 3 Jahre der Daten an, nicht alle 17 existierenden Datenjahre.
Verschiebe die Where Kriterien wenn möglich auf die lokalen Daten.
(Es ist wahrscheinlich Fummelei, auszuprobieren, was hilft. Solange Du nicht per Ausführungsplan valide Infos über die Umsetzung bei den Remotetabellen hast, bleibt nur, bestimmte Strategien zu versuchen. Ich hab keine Ahnung, was MS da bei Linked Servern liefert.)
So und warum das Ganze: Der Optimizer kann die Abfrage nicht sinnvoll umsetzen und macht es sich "einfach", er legt lokal eine temporäre Kopie der Linked Server Tabelle an und zwar vollständig, wenn es schlecht läuft. (muss nicht, kann aber passieren, Erfahrungswert) Bei kleineren Tabellen ist das ein super Konzept. Bei großen nicht, zumindest wenn nur ein geringer Teil der Tabelle benötigt wird.
Und noch weiteres Halbwissen/ Ideen:
Ein Problem des Optimizers kann sein, dass er nicht wie 'gewohnt' das Table Dictionary, Indizierung, Statistiken .. im Remote System anzapfen kann. Das ist leicht erklärbar, wenn man sich vorstellt, dass ein Remotezugriff idR strengen Berechtigungsrestriktionen unterliegt.
Mglw. gibt es dafür in MS auch Konzepte, dieses Problem zu umgehen.
Ich würde mal den pragmatischen Ansatz ausprobieren und mit Materialized Views oder Remote Views /- Filtern versuchen.