WP_Query
itself can’t do that logic internally but you can easily create the query dynamically.
$args = array(
'meta_key' => 'name',
'orderby' => 'meta_value',
'order' => 'ASC',
'posts_per_page' => '-1'
);
if ($post->ID == 1) {
$args['category_name'] = 'first';
} elseif ($post->ID == 2) {
$args['category_name'] = 'second';
}
$custom_loop = new WP_Query($args);