Fun fact, when you consider the bits required to contain p, this is equivalent to bucket sort with a bucket size of 1.
Ooh, that's a fun one.
Another con: you'd better hope your input contains no duplicates. :)
Duplicates could also be handled by using (L+1)^n, rather than 2^n, where L is the length of the input: even if all elements are identical one will end up with a unique value p = L * (L+1)^n.
For an efficient implementation, one might want to round L+1 up to the nearest power of 2 to get crucial micro-optimisations based on instructions for bit scanning.
(I think this ends up being a very complicated phrasing of a counting sort.)
Start with p=0 and add 2^n for each n. Then subtract the largest power of 2 successively to get your integers ordered.
Con: p will be very big.
Pro: you don't need ifs!