EE does support OR matching with the channel entries tag parameter:
search:body="pickles|shoes"
If that's not enough:
Filtering a Stash list with regular expressions
You can create your own index column when capturing a resultset as a list. Your index column would concatenate the values you want to filter by.
Cache the list so that you don't need to re-run expensive channel:entries queries each time the template is viewed. I'm using '@' as a delimiter for the index column:
{exp:stash:set_list name="cars" parse_tags="yes" limit="500" save="yes" scope="site" replace="no"}
{exp:channel:entries channel="cars"}
{stash:index}{marque}@{color}{/stash:index}
{stash:marque}{marque}{stash:marque}
{stash:color}{color}{stash:color}
{stash:reg}{title}{/stash:reg}
{/exp:channel:entries}
{/exp:stash:set_list}
{!-- get red OR blue AND volkswagen --}
{exp:stash:get_list name="cars" scope="site" match="#^(blue|red)@volkswagen$#" against="index"}
{reg} <br>
{/exp:stash:get_list}
{!-- get red OR volkswagen --}
{exp:stash:get_list name="cars" scope="site" match="#^red@|@volkswagen$#" against="index"}
{reg} <br>
{/exp:stash:get_list}
Caveat
Outputting more than a few hundred entries with channel entries will be expensive in memory and queries the first time your template is viewed and the cache generated. You could write your own optimised query to grab the relevant entries, or if you are trying to filter a large resultset, consider using something like the excellent Low Search.