Need to search a custom field (ingredients, one long string per post), but want it to allow phrases/non-exact matches

You could break apart the search-string into an array and add each word to it’s own meta-query

$search_query = 'strawberries and cream';
$search_query_array = explode(' ', $search_query); // turn search query string into array of words
$stop_words = ['and','or','that','have','with','this'];

if ( ! empty( $search_query_array ) ) {
    foreach( $search_query_array as $index ) { // remove any stop-words from the search query array
        if ( in_array($search_query_array[$index], $excluded_words) ) {
            unset( $search_query_array[$index] );
        }
    }
}

$args['meta_query'] = [
    'relation' => 'OR', // empty meta_query with or condition
];
if ( ! empty( $search_query_array ) ) {
    foreach( $search_query_array as $index ) { // remove any stop-words from the search query array
        $word = sanitize_key( $search_query_array[ $index ] );
        $args['meta_query'][ 'search_query__' . sanitize_key( $word ) ] = [ // give the meta query a handle for easy access & debugging
            'key' => 'ingredient_list',
            'value' => sanitize_key( $word ), // or '"' . sanitize_key( $word ) . '"',  or '%' . sanitize_key( $word ) . '%'
            'compare' => 'LIKE', 
        ]
    }
}

var_dump( $args ); // the final meta_query, just needs to be added to wp_query