Why aren't you creating "boundary periods"? Choose arbitrary beginning_of_time and end_of_time dates e.g. 01/01/0001 and 31/12/9999 and insert a fake period. Your example period_table will become:
+--+------------+----------+-------------+
|id|period_start|period_end|period_number|
+--+------------+----------+-------------+
|1 |0001-01-01 |2010-12-31|1 |
|1 |2011-01-01 |2011-12-31|1 |
|1 |2012-01-01 |2012-12-31|2 |
|1 |2013-01-01 |2013-12-31|3 |
|1 |2014-01-01 |9999-12-31|3 |
+--+------------+----------+-------------+
In this case, any query will retrieve one and only one row, e.g:
select id, period_number from period_table
where '2013-11-20' between period_start and period_end
+--+-------------+
|id|period_number|
+--+-------------+
|1 |2 |
+--+-------------+
select id, period_number from period_table
where '2010-11-20' between period_start and period_end
+--+-------------+
|id|period_number|
+--+-------------+
|1 |1 |
+--+-------------+
select id, period_number from period_table
where '2014-11-20' between period_start and period_end
+--+-------------+
|id|period_number|
+--+-------------+
|1 |3 |
+--+-------------+