Сталкивался с подобной проблемой. Обработка и создание таких уклов на "лету" оказалась слишком затратным, так что остановился на варианте:
В модели два поля - одно содержит только родной slug (subcategoru), второе содержит полный путь (/blog/category/......./subcategoru). Получается, что изменяются поля только при изменении самих моделей, в формировании урлов участвует только второе, а так как мы храним оригинальный слаг, при "полном рефакторинге" можно запилить более лучшее решение.