Descrivo prima l'ambiente in modo da rendere chiaro il problema.

Ho una tabella con un campo descrizione (Desc).
Attualmente faccio riempire dall'utente un campo ricerca (CmpRic) e poi applico il risultato creando una select in questo modo:
SQL = "SELECT * From MyTable where InStr(LCase(Desc),LCase('"&CmpRic&"'))<>0"

Questo è funzionante se l'utente ricerca ad esempio:
"Roma"
"Pizzeria"
"Piazza Verdi"

ma non funziona se si cerca:
"ristoranti di roma"
"sartorie camicerie"
ovviamente nel campo descrizione non ho una frase esatta di questo tipo.

Per ovviare ho intenzione di creare un array con tutte le parole (escludendo magari le parole di 3 caratteri o meno) e fare una query di questo tipo:
SQL = "SELECT * From MyTable where InStr(LCase(Desc),LCase('"&Arr(0)&"'))<>0 OR InStr(LCase(Desc),LCase('"&Arr(1)&"'))<>0"

La mia select ora avrà tutti i record con almeno una parola ricercata.

A questo punto ho il problema di come ordinare i record ricevuti.
La necessità è quella di avere prima tutti i record con più parole trovate andando a scendere. In pratica quello che fanno i motori di ricerca.

Come posso fare? Magari è possibile avere lo stesso risultato senza l'utilizzo degli Array?

Grazie