Proper database structure for storing multiple foreign keys
The countries column should store country IDs like: 10,12,14. 


This is a poor design, which you've already realised, (through your dislike of "LIKE"). 

Normalise your data and split these repeated values out into separate tables. 

select * from tours ; 
+------+ 
| id   | ... 
+------+ 
| 1234 | ... 
+------+ 

select * from countries ; 
+----+--------+
| id | name   |
+----+--------+
| 10 | Brazil | 
| 12 | Peru   | 
| 14 | Chile  | 
+----+--------+

select * from tour_countries ; 
+---------+------------+ 
| tour_id | country_id | 
+---------+------------+ 
|    1234 |         10 | 
|    1234 |         12 | 
|    1234 |         14 | 
+---------+------------+ 

select * from themes ; 
+-----+-----------+
| id  | name      |
+-----+-----------+
| 111 | Discovery | 
+-----+-----------+

select * from tour_themes ; 
+---------+----------+
| tour_id | theme_id | 
+---------+----------+
|    1234 |      111 |
+---------+----------+


Finding data? 


  SELECT ... WHERE COUNTRY = 'Brazil' AND THEME = 'Discovery' 


select t.* 
from       tours          t 
inner join tour_countries tc  on  t.id = tc.tour_id 
inner join countries      c   on  tc.country_id = c.id 
inner join tour_themes    tt  on  t.id = tt.tour_id 
inner join themes         t   on  tt.theme_id = t.id 
where c.name in ( 'Brazil' )
and   t.name in ( 'Discovery' )
order by t.id ; 


Regards,   Phill  W.