Basically you got it right. Two remarks though:
1) no need for ToArray(): why to materialize the IEnumerable when you are going to order it?
2) The Any() in order by doesn't make sense. You just want to order by the actual items.
string.Join(",",msg.Split(',').Distinct().OrderBy(x=> x));
I was confused a short while why Any() works on strings. Then I realized that String implements IEnumerable<Char> :)