First off, use EXPLAIN in front of the query to see what the query execution plan looks like.
Make sure that all relevant fields are indexed. That is, anything used in the ON clause of a join and anything found in the WHERE clause. In case you are using compound indexes, do note that and index of (field1, field2) is usable for field1 alone, field1 and field 2 together, but not for field2 alone. You can see what indices exist for a table by issuing SHOW CREATE TABLE tablename.
I suspect you are using a DBMS which allready handles dates according to the SQL standard, Y-m-d, which means that it's pointless to explicitly format your dates the way they are allready formatted.
I do not know how smart the handling of things like this is
DATE_ADD(a.start, INTERVAL 5 DAY) <= CURDATE()
but if it's not optimized internally, you can do it manually instead. First up, get the date of 4 days ago, before you execute the query, either by
SELECT @before_date = DATE_SUB(CURDATE(), INTERVAL 5 DAY);
or do it in PHP or whatever language you are using, and supply this value directly into the query. Then
a.start < @before_date
Once you have appropriate indexing and have modified the above stuff, try executing the query again and see how it does. If you still have problems, post the results of your EXPLAIN.