The pattern you're talking about is called relational division.
Option #1 (the self-join) is a much faster solution if you have the right indexes.
I compared the performance for a couple of solutions to relational division in my presentation SQL Query Patterns, Optimized. The self-join solution worked in 0.005 seconds even against a table with millions of rows.
Option #2 with fulltext isn't correct anyway as you've written it, because you wouldn't use LIKE
with fulltext search. You'd use MATCH(info) AGAINST('...' IN BOOLEAN MODE)
. I'm not sure you can use patterns in key:value
format anyway. MySQL FTS prefers to match words.