I’m fairly certain that the taxonomies have nothing truly in common except posts that they share, so I think you can’t avoid running an actual query of posts, in order to learn which categories are candidates for your criteria.
While, it may not be computationally the best method, you could do something like this…
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'my_required_taxonomy',
'field' => 'slug',
'terms' => 'my_required_term',
),
),
);
$loop = new WP_Query($args);
$out_array = array();
while($loop->have_posts()) : $loop->the_post();
$terms = get_the_terms($post->ID, 'my_variable_taxonomy');
foreach($terms as $term){
// note, can use term_id or whatever here instead
if(!array_key_exists($out_array[$term->term_slug])) {
$out_array[$term->term_slug] = 1;
} else {
$out_array[$term->term_slug]++;
}
}
endwhile;
wp_reset_query();
arsort($out_array); // edit: arsort is what you want
$slice = array_slice($out_array, 0, 5);
foreach($slice as $key => $value){
$term = get_term_by('slug', $key, 'my_variable_taxonomy'); // post_tag
$term_list .= '<a href="https://wordpress.stackexchange.com/term-base/" . $term->slug . '">'.$term->name.'</a>';
}
echo $term_list;