http://sqlite.org/src4/doc/trunk/www/design.wiki - они отказались от отдельных таблиц и сказали, что все значения буду хранится в одном большом пространстве ключ+значение. Плюс, на это дело наложено Log Structured Merge tree.
http://sqlite.org/src4/doc/trunk/www/key_encoding.wiki - они ловко закодировали ключи. Например, выборка из таблицы будет выборкой по определенному диапазону ключей, где первым значением будет номер таблицы (вероятней всего, всего пара байт), потом номер строки.
Индексы в таком случае получаются совершенно органически. При этом вставка втаблицу с индексом - это обычное добавление ещё одной пары ключ+значение, только ключ будет иметь набор выражений индекса. При типичном использовании LSM дерева вставка ОЧЕНЬ быстра. Реализованное на C# LSM tree, без каких-либо оптимизаций дает скорость в районе многих десятков и даже сотен тысяч вставок в секунду.
При этом данные, адресуемые по индексу, могут не содержать те поля, что есть в индексе. Это сокращает объем передаваемых данных и ускоряет поиск. Не надо делать дополнительную выборку данных записи БД.
Ключи могут быть упакованы, на общих условиях, что ещё сильней ускорит обращение к БД.
В общем, я считаю, что SQLite4 разрабатывают весьма компетентные люди. Чрезвычайно рекомендую к ознакомлению.