Try something like this:
create temporary table test (d date);
insert into test select '1970-01-01'::date+generate_series(1,50*365);
analyze test
create function month_day(d date) returns int as $$
select extract(month from $1)::int*100+extract(day from $1)::int $$
language sql immutable strict;
create index test_d_month_day_idx on test (month_day(d));
explain analyze select * from test
where month_day(d)>=month_day('2000-04-01')
and month_day(d)<=month_day('2000-04-05');