Define two sort keys, in such a way that one of them has no effect:
<xsl:for-each select=".....">
<xsl:sort order="{$cruiseSortDir}"
select="*[$cruiseSortCol!='Itinerary'][name()=$cruiseSortCol]" data-type="{$cruiseSortType}" />
<xsl:sort order="{$cruiseSortDir}" select="substring-before(Itinerary,'-')" data-type="{$cruiseSortType}" />
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference