When querying a combination of posts and other meta fields, is there a better solution than directly modifying the WHERE value?

You want to make sure you’re only messing with the main query and not subsequent queries called from a plugin or in a template on the search page. In other words…

 if( !is_admin() && $query->is_search ) {

should be

 if( !is_admin() && $query->is_search && $query->is_main_query() ) {

See http://codex.wordpress.org/Function_Reference/is_main_query