Da sua consulta (formatado para legibilidade)
SELECT
table1.*,
tb21.year,
tb21.month,
tb21.day,
tb22.year,
tb22.month,
tb22.day
FROM
table1
LEFT JOIN table2 tb21
ON table1.year = tb21.year
AND table1.month = tb21.month
AND (tb21.day = table1.day
OR tb21.day = table1.day+1)
LEFT JOIN table2 tb22
ON table1.year = tb22.year
AND table1.month = tb22.month
AND (tb22.day = table1.day+2
OR tb22.day = table1.day+3)
Além do conteúdo restritivo fornecido, vejamos você tentando comparar os dados do mesmo dia + 1, +2 e +3. Vamos também supor apenas para este exemplo que você tenha apenas 10 dias na tabela representada como todos os dias 1 a 10 de junho de 2016 em ambas as tabelas Table1 E Table2.
Novamente, isso é uma suposição de que cada tabela tem todas as 10 datas em questão apenas para fins simplistas de por que tantos registros. Assim, para a data da Tabela 1 de 1º de junho de 2016, ela se qualificará com a tabela 2 (versão tb21) e retornará DOIS registros. Um para 1º de junho e outro para 2 de junho. Então agora você tem DOIS registros em seu resultado. Agora, você faz isso novamente à esquerda para a tabela 2 (versão tb22). Desta vez você está procurando 2 e 3 dias de folga, dos quais você tem 3 e 4 de junho na tabela. Então você está obtendo um resultado cartesiano. Portanto, para o registro de 1º de junho na tabela 1, agora você tem 4 registros da seguinte forma.
T1Year T1Month T1Day T21Day T22Day
2016 6 1 1 3
2016 6 1 1 4
2016 6 1 2 3
2016 6 1 2 4
Agora, digamos que sua tabela 2 tenha 3 entradas em 2 de junho e 3 entradas em 3 de junho e seus dados ficarão super inchados. É por isso que você precisa fornecer mais esclarecimentos sobre o que está tentando fazer.
Portanto, não tendo um contexto verdadeiro sobre o que você está procurando, ignore o fato de que não está utilizando perfeitamente seu índice. Você tem um OR com base na data por meio das comparações de dias. Ele ainda deve utilizar para a consulta de qualquer maneira.