XPathy na dużych plikach XML do demonów szybkości nie należą. Zrobić w nich zaś sensowny odpowiednik full-text-searcha to już zupełnie zajedziesz maszynkę. Innymi słowy - niby można - tylko czy jest to dobre i sensowne podejście?
Iść zawsze można, nikt nikomu nie broni. Problemem jest jednak faktyczna wydajność w ujęciu ogólnym. Wyszukiwanie adresu jest bowiem tylko częścią zazwyczaj szerszego zapytania. W takim wypadku zaczynają się kombinacje z optymalizacjami już, bo inaczej się po prostu nie da tego w rozsądny (o możliwie niskim czasie przeszukiwania) sposób zrobić.
A zwróciłeś uwagę, że najczęściej ulica to tylko jedna składowa zapytania? Szukasz po prostu "Kwiatowa 10" czy "Pcim Dolny, Kwiatowa 10"? Jak z tego złapiesz wzorzec dla LIKE? A może złapiemy regexp w bazie? W tym momencie szlag trafia cudowne indeksy. Regexp i Like wszak z indeksu korzystają tylko gdy mają wspomniane przez Ciebie zakotwiczenie z lewej. Innymi słowy: LIKE 'państwo/%' indeks chwyci, ale już LIKE '%słowo%' niestety z indeksu nie korzysta. A przecież trzeba doprowadzić do formy, gdzie mamy wyszukiwane pathy nie z jednym, ale dwoma lub więcej miejscami podanymi jako parametry wyszukiwania. Tu i tak jest w miarę jeszcze statycznie, bo adresy wszak aż tak często się nie zmieniają, a i rozrost miejscowości aż taki szybki nie jest.
Co zaś do "trzaskania appek", to akurat w pracy mam moment, gdy siedzimy z zespołem nad wersją 1.0 aplikacji obecnie tworzonej (nazwijmy ją 2.0) No i mamy na tapecie integrację "wsobną", czyli wchłonięcie części funkcjonalności 1.0 do obecnie rozwijanej, przy jednoczesnym nie tykaniu wersji 1.0, bo leży na produkcji

Migracja pełną gębą za jakiś czas, a już teraz przemapowywanie modeli, encji i relacji oraz co z tym związane, przemyślenie transformatorów danych pomiędzy biema wersjami oraz przerobienie kodu tak, by jakiś czas działały na produkcji oba i nie kolidowały ze sobą, bo będą wszak na tych samych danych równolegle pracowały. Mimo tego że bazowano na encjach z 1.0, to projekt nieco odpłynął od pierwotnej koncepcji. Było wtedy trochę błędów popełnionych. Samo wydzielenie i "optymalizacja" staroci po jakoś pół roku to już tragedia. Po 2 latach to już by była masakra, która wiązała by się pewnie z zaoraniem kodu i pisaniem od zera - szybciej by to pewnie wyszło.
Dlatego też IMHO czasem warto poświęcić chwilkę i od początku zaprojektować coś z głową, niż po miesiącu czy dwóch przeklinać nietypową implementację, nie zawsze do końca przemyślanego podejścia. Ilość wulgaryzmów wyrażanych wszem i wobec na pewno będzie mniejsza

Tutaj problem na jaki napotkał autor nie jest duży. Prawda jest taka, że podany przykład nie jest problemem tak naprawdę. Nie jest bowiem konieczne wrzucanie całego Terytu

Sam gdy z nim pracowałem olałem znaczną część danych. Do jednoznacznego określenia jest tak naprawdę wystarczające mieć: wojewodztwo - powiat - miejscowosc i ewentualnie ulica czy dzielnica. Zależy czy te ostatnie konieczne i używane. Każdy inny rekord można śmiało odrzucić.
Tu właśnie zahaczamy o najważniejsze - przemyślenie aplikacji, jej funkcjonalności i działania. I właśnie to powinien autor tematu przemyśleć zanim zacznie pisać skrypty importujące dane z xml.