That of @rozcietrzewiacz is a great solution, but if you still want to stay with text files (as returned by `file`), you can carefully build an array of file names, then execute your `grep` command on that array. 

I suppose the following:

* in no filename there is a newline (but spaces can be present);
* a `file` util that support `-0` and `-i` options;
* GNU sed, or a sed supporting `\x` exadecimal char codes.

Here is an example

    #!/bin/bash
    
    get_file_list() {
      local path="$1"
      find "$path" -type f -exec file -0i {} + |
        sed -n '/\x00  *text\//s/\x00.*//p'
    }
    
    list=()
    while IFS= read -r line; do
      list+=("$line")
    done < <(get_file_list .)
    
    # to choose options and pattern
    grep -i pattern "${list[@]}"

The `sed` command take a sequence of line of text coming from `file`, composed from a filename, a NUL byte and the mime-type. If in the second part (after the NUL) there is the word `text/` then remove that part and only print the filename, otherwise print nothing.