Мне что придётся при вводе каждого символа отправлять туда же запрос на получение новых данных по книгам?
Нет, можно посылать запросы реже.
Допустим, мы только что загрузили страницу; в поле ввода пока пусто. Мы заранее (при заполнении БД) составляем дерево запросов (оно по размеру сопоставимо с ключами поиска в БД; ну, можно обрезать). Предполагается, что юзер может ввести первую букву - одну из тех, которые являются первыми буквами ключей поиска. Значит, можно сразу же заранее загрузить варианты подсказок для первой буквы, и далее просто выбрать нужный уже загруженный вариант.
Можно загрузить варианты подсказок для любых первых двух букв. Или трёх. Или сколько угодно. Просто количество вариантов растёт экспоненциально.
Это называется "упреждающее чтение".
Есть вариант - загружать только самые популярные варианты подсказок. А для этого придётся вести статистику.
Короче говоря, ценой уменьшения количества запросов и роста атликабельности - будет рост трафика и усложнение как калинтской, так и серверной части сайта. Решайте сами, нужно но Вам или нет.
По хорошему - смотрите, как это сделано у грандов индустрии - у поисковиков, у крупных магазинов, etc.