Would you want a single level of grouping based on a pair of fields or would you want multi-level grouping?

For the first option you'd need to generate an extra field on your model that combines the two fields in question. Easiest way to do that is probably using a convert function to concatenate two other field values. This gets complicated if you allow users to change the grouping as they need a way to access this field and it isn't clear where this would go in the UI.

Alternatively, if you want multi-level grouping you're going to struggle. See here:

how to display newly defined 'surname' in grouping header?

hi,

surname kind of grouping works fine. Now I am facing to an issue to display it, or similar in grouping header.
In my case grouping members by projects, as "team"return instance.get(group.property)+ ', ' + instance.get('member').fullName + '(' + instance.get('project').description + ')';

"team" in header:groupHeaderTpl: ' Team: {team} ({rows.length})',

the problem for me the nested objects and to read value in the header template. Somehow member.fullName does not work.