Оператор LIKE использует символы _ и % как спецсимволы, и если таковые будут в запросе, оператор может выдать некорректный результат. И слеши используемые в выражении для поиска нужно удваивать. Поэтому данные для LIKE нужно предварительно обработать:
array('like','%'.addCslashes(trim($_GET['q']), '\%_').'%')),$n,$member_list);
В плане нагрузки на базу - так ваш код, это живой поиск, иначе бы просто SELECT по полю индексированному.
как сделать запуск функции только когда пользователь ввел последнюю букву
А какой считать последнюю, разве можно на это ответить однозначно? Можно по таймеру определять - нет определенного времени нажатий, значит запрос. Можно и через N введенных символов делать запрос, но в этом случае, если введено меньшее количество, то запроса вообще не будет.
И еще как сделать что бы при удалении символов из поля поиска до 0 скрипт не выполнялся
Это проще - длину строки проверять.