I would use .net's Directory class.
var files = Directory.GetFiles(path, "*.doc", SearchOptions.AllDirectories)
.Where(m => m.Contains(yourSearchTerm));
That'll return all .doc files in the directory at the path you provide that contain the given search term. If its too slow I'd look into limiting it from running on the entire c drive.
More info about the Directory class can be found here
More info about Enumerable's Where method can be found here
Edit: To handle UnauthorizedAccessExceptions you need to do this recursively and check each directory individually so you can eat the exception if you don't have access to the current directory.
IEnumerable<string> SearchAccessibleFiles(string root, string searchTerm) {
var files = new List<string>();
foreach (var file in Directory.GetFiles(root)
.Where(m => m.Contains(searchTerm)))
{
files.Add(file);
}
foreach (var subDir in Directory.GetDirectories(root)) {
try {
files.AddRange(GetAllAccessibleFiles(subDir, searchTerm));
}
catch (UnauthorizedAccessException ex) {
// ...
}
}
return files;
}
And can be used like:
var files = GetAllAccessibleFiles(@"c:\", "bugs");
This will return every file in an accessible directory that contains the phrase "bugs" in the file name.