index and small set of possible values
There are 3 choices.  VARCHAR is one of them; probably the 'worst'.

You suggested a second one -- an extra table.

The third is:  ENUM('one_option', 'another', ...).  It will take only 1 byte (like TINYINT).  You can directly use the strings that you are currently using with VARCHAR.  If you ever need to add another option, ALTER TABLE will be 'instant' if you add the new option on the end of the list.

It is useless to index low-cardinality columns; the optimizer will decide that a table scan is faster and ignore the index.  However, a 'composite' index that includes such a column is often useful.