Несколько $index'ов делаются так и никак иначе (всё остальное это какой-то ужас отвратный):
<ul>
<li ng-repeat="(i, items) in collection">
<ul>
<li ng-repeat="(j, item) in items">
{{i}} — {{j}}
Чекбокс: <input type="checkbox" name="field[{{i}}][{{j}}]">
<button ng-click="doSomething(i, j)">Клацнуть</button>
<button ng-click="buyItem(item.id)">Купить</button>
</li>
</ul>
</li>
</ul>
Что же касается вашего вопроса о покупке, то покупать и фиксировать выбранный товар нужно не по индексам гатегории и подкатегории (это абсолюто неправильно), а по айдишке товара.