If you have GNU grep, you can use Perl regular expressions, which have a negation construct.
grep -A1 -P '^(?!.*ignore me).*needle' If you don't have GNU grep, you can emulate its before/after context options in awk.
awk -v after=1 -v before=0 ' start <= until { start = until + 1; } /needle/ && !/ignore me/ { for (i = start; i < NR; i++) { print h[i]; delete h[i]; } until = NR + after; start = until; } { if (NR <= until) print $0; else h[NR] = $0; start = NR - before + 1; delete h[start-1]; if (start <= until) start = until + 1; } END {exit !until} '