Yep! This is entirely possible! Basically what you do is rebuild the page layout each time a visual is added or removed. Here's a good starting point:
you'll use similar code to this. Basically, iterate through the visuals on the page and add them to the layout in different places based on their names.
I'm thinking you'd have an easier time using a Python data function for what you're trying to do. I would think something like:
li = list(search_list.split(', '))
output = text_column.apply(lambda row: all(x in row for x in li))
where search_list is a string document property containing a comma-space separated list of the terms to seach for, text_column is a column from the data table that you want to search for the terms, and output is a column output which will contain true if all terms in search_list are in the corresponding row from the text column and false if any term isn't.