А зачем вообще ЧПУ?
ЧПУ это наследие стареньких движков.
Решение должно быть изначально в архитектуре.
т.е. ЧПУ как правило подразумевает, что у нас есть некая карта, а потом мы делаем ее более красивой…
Мы все равно будем делать те или иные запросы в базу, так почему бы и не искать эту информацию по ключу в виде полноценного пути?
Должная оптимизация с лихвой покроет издержки от того, что мы ищем по более длинному чем числовой индексу.
Теоретически и тут можно оптимизировать но на практике лично я до этого не дошел.
Была мысль использовать не сам путь а md5 от него, а если и это будет недостаточно быстро, то урезать его до bigint или даже до int ведь md5 это всего 16 байт, а при конфликте хэша мы просто получим две страницы вместо одной, и выберем перед выводом нужную…
Хотя при разумном количестве страниц конфликты маловероятны даже для обычного int.
Но на практике наши задержки или слишком малы, или таких запросов просто непомерно много, а если их много, то они у нас и так будут закрыты кэшем, так стоит ли о них беспокоиться?