Optimised way to search over 2 milllion poi data in mysql
You can use Geohashing (Geohasing)

You have to create a geohash for every POI in your table.

And then based on the precision that you choose you can use
LEFT(your_geohash_column,'c1','c3','c4','c5','c6',c7','c8')
Where the c's are the 8 neighbors from the center calculated by your desired precision. 

Keep in mind that you are limiting the results with the precision which you can consider it a radius.