I detest the iTunes UX, so I'm a fan of any competition :-)
The 'conventional' way to sort is by clicking on the column headers. So I think any solution should attempt to be compatible with this behavior.
For multi-column sort, things become more difficult. Columns can quickly get cluttered with tiny arrows or badges. The tiny directional arrows can be frustrating to click on because they are so small, and they are basically unusable on tablets or smartphones.
On top of that, the table layout has a left-to-right column order so it can be unintuitive to figure out sort order by jumping between columns.
Given the complexity and flexibility desired in multi-column sort, I think it makes sense to pull this out into a separate control, but to place it close to the table so that there is a spatial relationship between the two.
Here is one flexible interface which allows users to quickly build a multi-column sort by just clicking or dragging on column headers:
You can click on a column header or drag it into the control to add a sort. You can also rearrange the columns within the control to change the order of the sort, or click the arrows to change direction of the sort:
While this approach has the downside of introducing a control outside of the table, it has a number of benefits which may outweigh the cost:
- Sort order is clearly and visually laid out. It separates the "sort order" from the "table column order" so removes the need for badges or awkward jumping around to figure out sort order. Changing the order of the sort is as simple as dragging the order around inside the control.
- Interface is mobile/tablet friendly, with large buttons and landing areas for building and adjusting the sort.
- Allows the user to build arbitrarily complex multi-column sorts, and adjust the sort easily.
- The control relies on dragging or clicking on the table, so the relationship between the control and the table is both clear and reinforced by usage.
- Pulling sort out into different controls allows for views/sorts to be saved, etc (probably not appropriate for this application, but for data analysis applications this design pattern works well)
- Tapping or dragging a column automatically creates a default sort order (ascending or descending), which the user can adjust via a large button. This avoids asking the user for a down or up order and unnecessarily complicating the build process.