How to improve performance to 12million rows table?
I think I have been using that table.  It is clunky when you want to see states/provinces and other things like that.
Sure break out a country if that is all you need.  But don't plan on breaking out all ~250 countries into separate tables (plus continents, etc).
VIEWs are not performance enhancers.  They can hide the clumsy nature a table like that one.  (Especially due to the fcode checks.)
This may help:
INDEX(fcode, country_code)

WHERE feature_code LIKE 'PCL%' AND ...
WHERE feature_code = 'ADM1' AND country_code = 'ES'

If you would care to provide the desired queries (not the views) and the desired table(s), I may be able to provide more suggestions.
Lat/lng searches
Lat/lng needs more work than simply a composite index.  Suggest you start with a &quot;bounding box&quot; and these two composite indexes:
INDEX(lat, lng),
INDEX(lng, lat)

If such searches are not fast enough, then look at more complex methods in http://mysql.rjweb.org/doc.php/find_nearest_in_mysql