Вы можете использовать отдельную нить. Когда пользователь вводит текст, вы можете создать поток, перевести его в спящий режим на 500 мс, а когда он проснется, проверьте, изменился ли введенный текст.
EDIT
Создать обработчик
private Handler h = new Handler();
Создайте исполняемый файл, который делает ваш динамический поиск
private Runnable myrunnable = new Runnable() {
public void run() {
....
};
Затем вызовите ваш runnable в onTextChanged как
h.postDelayed(myrunnable, 500);
см. Обработчик для получения дополнительных параметров / информации
Убедитесь, что ваши потоки будут обращаться к памяти согласованным образом!