I do all of my text searching in TextPad. It's pretty quick, and I can't live without it's support for POSIX regular expressions. However, most things are going to choke on 10000 files.
If most of the code is truly legacy and remains unaltered, what about scraping the source for all of the function names into a single text file and then searching just that? You could periodically re-search the 10000 files to keep it up-to-date.
I'd use TextPad for this as each instance it finds is listed on a new line in the search results. Double-clicking on the relevant line opens up the relevant file where the instance resides. TextPad can save the search results in what it calls a Workspace so you wouldn't have to redo the search each time you opened TextPad (unless you wanted to).
Here's what the search results look like:
sqlite.cpp(80): int SQLiteSTMT::Bind(int iCol, sqlite3_int64 value) {
sqlite.cpp(84): int SQLiteSTMT::Bind(int iCol) {
sqlite.cpp(88): int SQLiteSTMT::Bind(int iCol, const char* value, int len, void destructor(void*)) {
sqlite.cpp(92): int SQLiteSTMT::Bind(int iCol, const sqlite3_value* value) {
sqlite.cpp(96): int SQLiteSTMT::BindBlob(int iCol, const void* value, int len, void destructor(void*)) {