En principio el problema es saber 'cuando el usuario deja de escribir', precisamente para eso se usa un botón 'aceptar'. Así el usuario indica explícitamente que ha temrinado con la entrada de datos.
No obstante siendo es la opción obvia hay otras cuando se quiere alguna otra cosa como es tu caso.
Una de ellas es usar el evento validating, no el de change...
El evento validating, sucede cuando se pulsa otro control, es decir cuando el foco del cursor se intenta dirigir a otra parte, antes de que se abandone el foco de dicho objeto (al caso supongo un textbox), salta dicho evento... requiere eso sí que el usuario realice alguna acción de pulsar en otra parte, si simplemente no hace nada, pues el evento no salta.
Pero en realidad el evento validating, suele usar para garantizar que los datos introducidos reúnen el formato requerido (cuando es el caso).
Es entonces cuando tiene sentido usar un timer...
El timer lo activas en primer lugar cuando el control gana el foco, y lo actualizas (reset el timer a 0) cada vez que sucede un evento change (sucede con cada carácter añadido o eliminado), entonces si tras reactivarse el timer, el lapso se consume (pongamos 1-2sg. es cuando resulta pertienente hacer la búsqueda con los caracteres que contiene el textbox...
Básicamente es este pseudocódigo.
sub form_load ...
timer.interval = 1500 ' debes probar con varios valores de intéralo, hasta que estés satisfecho con la espera.
timer.enabled = false ' salvo que sea el único control en el form que entonces ganará el foco sí o si.
fin sub
sub textbox_gotfocus ...
timer.enabled = true
fin sub
sub textbox_change ...
timer.enabled = true
fin sub
Sub timer_Tick() ...
timer.Enabled = False
call BuscarLoQueSea
fin sub