TINYINT или SET?
Помним/знаем о том, что set — битовая маска, может одновременно хранить несколько значений?
Эквивалент для tinyint — enum. (ну или set, но тогда с реализацией битовой маски, иначе зачем было set'ом делать?)

Если значение в 1 момент времени может быть только одно — enum.
Если несколько — set.
Просто потому, что текстовое представление легче воспринимается, чем числовое.

Все трое на идентичных диапазонах данных занимают равное место. dev.mysql.com/doc/refman/5.1/en/storage-requirements.html
А это смотря где используете. По сути оба маленькие, оба будут занимать мало места, но лично для меня разница очевидна:
SELECT * FROM `cars` WHERE type = 4
и
SELECT * FROM `cars` WHERE type = 'hatchback'
Эти запросы одинаковы, но говорят об одном существенном преимуществе set (он же enum)