prova a spezzare usando una SP

codice:
SELECT max(DataListino) AS DATA_MAX 
INTO #tmp1 
FROM Listini 
WHERE fidFornitore=@myidFornitore AND fidPaese=@myidPaese 
GROUP BY fidFornitore, fidPaese
		
		SELECT 
        [idListino]
        ,[fidFornitore]
        ,[fidPaese]
        ,[NomeProdotto]
        ,[Atc]
        ,[PrincipioAttivo]
        ,[Brand]
        ,[PackSize]
        ,[CodificaEU]
        ,[Ean]
        ,[Prezzo]
        ,[DataListino] 
        ,[Paesi].Paese as Paese
        ,[Fornitori].RagioneSociale as RagioneSociale                                      
        ,'Nessun Prodotto Ita corrispondente.'
        FROM Listini
        INNER JOIN Fornitori ON fidFornitore=idFornitore
        INNER JOIN Paesi ON fidPaese=idPaese
        INNER JOIN #tmp1 T1 ON T1.Data_Max=DataListino
        AND (CodificaEU IS NOT NULL AND CodificaEU<>'') OR (Ean IS NOT NULL AND Ean<>'')             
        AND fidFornitore=@myidFornitore AND fidPaese=@myidPaese
        ORDER BY NomeProdotto;
poi la velocità dipende anche da quanta roba hai in archivio!