Я себе написал директиву датагрида самодельную с пагинаций, сортировкой и инпутами под шапкой для поиска. В нее отдаю один большой обьект с данными, настройками и структурой колонок. При любом тыканье мышкой вызывает метод апдейт, который шлет запрос {страница 7, количество записей 20, сортировка: title, order: asc, filterTitle: 'abc', filterSurname: 'asd'}, бэкэнд формирует запрос и выдает пачку данных в json, полученный массив автоматом подхватывается директивой и грид перерисовуется.
В общем виде можете реализовать такой же подход, только еще добавить связь между фильтрами в колонках, чтоб выбираешь Область - оно обновляет список городов..