In XSLT 2.0 you can do
xsl:sort select="if ... then policy/@name
else if ... then policy/description
else ...
It's not so easy in 1.0. Some of the entries in Dave Pawson's FAQ relate to this problem:
http://www.dpawson.co.uk/xsl/sect2/N6461.html#d8741e455
If you've got a processor that offers xx:evaluate() (e.g. Saxon) then you can put the XPath expression into a string variable $sort-key and do xsl:sort select="saxon:evaluate($sort-key)".
Another technique is
<xsl:sort select="policy/@name[$condition=1]"/>
<xsl:sort select="policy/description[$condition=2]"/>
<xsl:sort select="policy/@created[$condition=3]"/>
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference