@jinchong as @vsr1 noted, FTS is probably the most likely to have an appropriate solution.
( You could build an array from SPLIT() results and index that but some brief experimentation suggests limited possible evaluation via an index. (SPLIT() rather than TOKENS() so as to retain order.) At this point it is unlikely to meet your needs so I wouldn’t pursue it further.
That said, if the words supplied could be in any order - i.e. match both “my name is john” and “john is my name” with [“is”, “john”] as the filter (note: individual tokens, not single string - but this could be generated in the statement) - then this could potentially work. Index may still be large though.
If they would always provide the prefix, then LIKE would be the way to go but with leading wild-cards there is no index evaluation. )