Limiting posts_join, where, etc to a specific WP_Query object?

The most reliable way is to define your own query var and then check it:

$my_query = new WP_Query( array(
  ...
  'context' => 'my_query'
) );

Then, from your callback:

function alter_post_clauses( $clauses, $wp_query ) {
  if ( 'my_query' == $wp_query->get( 'context' ) ) {
    // do stuff
  }

  return $clauses;
}
add_filter( 'posts_clauses', 'alter_post_clauses', 10, 2 );