It now uses full-table scans for all tables - which it shouldn't. At least the table that contains the field start_date should be accessed via an index because you want only a *very few* rows from that table. Looks quite weird.
Anyway the join between time_intervals and timespans is gigantic (30.000x15.000). Does someone know what they mean with respect to calendar?