meta_query joins the postmeta table once per meta clause. Three meta clauses means three joins on a typically un-indexed table.
Add a database index on (meta_key, meta_value(40)) for hot meta keys, or move frequently queried fields out of postmeta into custom tables.
For posts_per_page queries with meta filters, use no_found_rows => true when you do not need pagination — it skips the expensive SQL_CALC_FOUND_ROWS.