Переопределяем сравнение для айтемов, благо оно virtual.
А можно пример, пожалуйста?
Создаем класс, наследник от QTableWidgetItem, добавляем член класса, как-ой нибуть int _sortIndex, делаем к нему аксессоры(sortIndex(), setSortIndex()). Переопределяем функцию:
C++ (Qt)
bool UserWidgetItem::operator<(const QTableWidgetItem &other) const {
UserWidegetItem *item = static_cast<UserWidgetItem*>(&other);
if (!item) return false;
return sortIndex() < item->sortIndex();
}