Yes. When reviewing Duy's patch, I wondered why we would need all those special cases (or: why is treat_file so damn complicated). It turned out that it gets much simpler after fixing some bugs and eliminating the is_excluded / is_path_excluded discrepancy. This variant also optimizes git-status --ignored.
I tried to express my ideas here [1], but I guess this was a bit unstructured, sorry :-)
Note that we could skip excluded checks for tracked directories as well if it weren't for the current notion of ignored tracked directories.
I'd still like to eliminate the second directory scan in git-status --ignored (i.e. don't call fill_directory twice, which would save ~50ms for linux and ~300ms for WebKit), but that's a bit more involved...
[1] http://thread.gmane.org/gmane.comp.version-control.git/217111