Memecache le richieste di battitura/risposte DB ed evita il viaggio al DB ogni volta dopo la prima.
Oppure genera un elenco precompilato delle possibili frasi di completamento automatico, memorizzalo nella cache e interrogalo invece del DB. Perché è necessario interrogare il DB per una casella di ricerca? Genera un elenco accettabile e utilizzalo invece di creare una connessione multilivello!
Oppure assicurati che ci siano indici sulle tabelle create dalla tua query al DB.