Надеюсь индекс (id,book_id, title) у Вас построен ?
Если да и оперативки достаточно, чтобы он целиком оставался в ОЗУ, то
запрос select id,book_id,title выполняется без обращения к диску. Если памяти маловато, то перечитавает с диска только файл индекса.
А вот для индекса только по book_id будет читать и основной файл.
А так ваше предположение сделать кей - валуе хранилище для блобов вполне правильное.
Будет прекрасно работать по первичному ключу.
Но думаю пока дробить нет смысла. Просто пишите код так, чтобы потом можно было легко переделать.
Н-р заведите две константы с одинаковым пока значением
TABLE_CHAPTERS_INFO и TABLE_CHAPTERS_TEXT
А разнесете их физически, после того как захотите добавить еще какие-то поля помимо титла. Н-р размер в байтах и / или листах, дату обновления