I am not a Questa/Modelsim expert but I do a bit with it in TCL so this is just my approach to doing it.
This breaks down into several steps;
1) Traverse the design hierarchy
2) Create groupings
3) Add signals to groups
1) Traversing the design
Either traverse the model itself, or add all signals to wave and traverse that
1.1) You can select+search for things using search wave -all signal_name
1.2) or you can also traverse the design using find instance /* and then recurs manually on that (etc. find instance /top/* ...) you can then find nets/signals using find signals/nets/.. YOUR_LEVEL
2) Creating groups
You can create a group by selecting something in the wave window and doing "wave group name".
What isn't so obvious is you can do the same thing by actually then re-selecting the 'red group diamond' that appears and re-group it thus creating a sub-group
Or you can also specify sub groups using "add wave -group G1 -group G2"
3) Add signals to groups
You can add signals by using the normal "add -position N wave signal_name"
Other bits that help;
a) Selecting things in the wave window
set WAVEWIN [view wave]
$WAVEWIN.tree.tree1 curselection
$WAVEWIN.tree.tree1 selection clear all
$WAVEWIN.tree.tree1 selection set 1 2 etc
b) getting signal names from the selected items
# gets its signal name "sim:/path/to/sig"
set SIGPATH $WAVEWIN.tree.tree1 get 1
c) I might comment that adding all the signals to the same wave window might get really unmanageable so you might also want to consider adding to separate wave windows?
set WAVEWIN [view -new wave]