xargs cat like that loses the filenames and there's no good way to pass them through the pipeline at the same time as the data flows through.
grep -l lists the names of files with matching strings, so you could use that:
find . -type f | xargs grep -l hello
Or with just having
grep -r recursively dig through the directory, also resolving issues the issues
xargs has with filenames containing white space or quotes:
grep -lre abc .
If you wanted the matching strings too, and not just the filenames, remove the
-l to get the usual
grep behaviour. With
-r, it should print the matching filenames too even though we only give one path on the command line.