Storing the literal values in a
BINARY column is an efficient choice but only of you want comparisons to be case-sensitive such that 'a' != 'A'.
Given the same data (essentially hexadecimal digits only), if you wanted case insensitivity then you would want to use
latin1 where 'a' = 'A'.
Both of these will use 1 byte per character.
However, you can use half a byte per character if you are willing to pack the data on the way in and unpack it on the way out. For HTML color codes, use a 3 byte column
INSERT INTO html (color) VALUES (UNHEX('f2a709'));
SELECT HEX(color) AS color FROM html;
# would return 'F2A709'
# use LOWER() around HEX () if you want the lowercase equivalent returned.