You can't be sure that no hashes overlap but a high number of x (e.g. 65535) will reduce the risk.
If it's Latin only you could also do two-levels using character partitioning for each character:
RANGE_N(SUBSTRING(column1 FROM 1 FOR 1 BETWEEN
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
Btw, if you got a UPI on a CHAR(2) the possible number of rows is probably way to small for partitioning.
What is the goal for partitioning this column? With the UPI, any query WHERE column1='xx' will already be a single AMP, single row query.