per alleggerire potresti fare una cosa del genere:

connettiti al db dei prodotti e fai un loop per ogni record:

codice:
testo_news = lcase(testo_news)

i = 1

Do While Not RS.EOF

   prodotto = RS("nome_prodotto")
  
   If InStr(testo_news,prodotto) > 0 Then
      testo_link(i) = prodotto
      dati_link(i) = RS("id_prodotto")
      i = i + 1
   End If

   RS.MoveNext

Loop

TotaleLinks = i
'scrivi la news;

'testo_news

codice:
For j = 1 To TotaleLinks

    istr = "<a href='scheda_prodotto.asp?id_prodotto=" & dati_link(j)
    istr = istr & "'>" & testo_link(j) & "</a>
"
    Response.Write(istr)

Next
la questione è che tutti i controlli sui db li fa solo per le news visualizzate; quindi, se in una pagina non fai vedere tutte le news del db ma solo un certo numero di news per pagina, il numero di accessi e controlli sul db rimane comunque limitato!