You have to separately add a bunch of options for each -name. Try this:
IFS='
'
set -o noglob
find . -false $(awk -F '\t' -v OFS='\n' '
NR>1 && $4 != "" { print "-o", "-name", $4}' file.txt)
awk prints the arguments one per line and we use the split+glob operator ($(...) unquoted) in the shell, with the glob part disabled and the split part tuned to split on newline only to pass those as arguments to find.
This could fail if file.txt is large. Also beware names are treated as patterns. For instance, if there's a line containing [f]ile*, it will find all files whose name starts with file, not the file called [f]ile*.
The normal and safe arrangement would be to use xargs:
something something | xargs -r0 find . -false
but xargs could run find multiple times and split the argument list between an -o and a -name or between -name and the actual file name. We could avoid that by passing -n 150 or any number that is a multiple of 3 and is hoped to be small enough to fit in the limit of the size of arguments.
Putting -false first simplifies the rest of the processing because that way, we can make the output completely regular, with an -o before each -name.
If your find doesn't support that non-standard predicate, you could replace it with -links 0 or anything guaranteed to be false.