There is no property or whatsoever that handles this for you, but you have a good idea there, putting the varchar data in a separate table. To do so, follow these steps.
Create your table holding your varchar data like this:
CREATE TABLE log_messages (id int auto_increment primary key, message varchar(200)) ENGINE = MyISAM ROW_FORMAT=FIXED;
Insert your varchar data
INSERT INTO log_messages (message) SELECT DISTINCT your_varchar_column FROM your_table;
Add a new column in your original table to reference the new log_messages table
ALTER TABLE your_table ADD COLUMN message_id int not null;
Create the reference
UPDATE your_table y INNER JOIN log_messages m ON y.your_varchar_column = m.message SET y.message_id = m.id;
Then you can drop the varchar column from your table
ALTER TABLE your_table DROP COLUMN your_varchar_column;
Now that you have that, I'm not sure why you're concerned about performance impact on delete operations. There's none.