CHAR(5)
will always use 5 bytes of space (10 in multi-byte encodings since mySQL 4.1) because every character can store 255 different characters (or even more in multi-byte encodings).
An unsigned SMALLINT
(0..65535) will take 2, an unsigned MEDIUMINT
(0.... 16,7 Million) 3 bytes.
Bottom line: Using a CHAR type for numeric data is always a waste of space.
As to the other two questions:
Does a UNIQUE INDEX on an INT column perform faster than a CHAR(5)?
Very, very likely yes, because the index doesn't need to be alpha-numeric and can work with a smaller amount of data
Is SELECT MAX() on a INT column faster than MAX() on the col5 CHAR(5)?
Extremely likely yes, because to run a numeric function on a CHAR column, a type cast has to be performed on every record.
Reference: