Fetch post meta in the same query as the main loop

You can’t use double sorting option. You can try this code once:

add_action( 'pre_get_posts', 'fetch_staff_people' );
function fetch_staff_people( $query )
{
  if ( is_post_type_archive('staff') && $query->is_main_query() )
  {
    $query->set( 'post_per_page', '-1' );
    $query->set( 'meta_key', '_staff_purpose' );
    $query->set('orderby', 'meta_value_num'); // sort by purpose, then by staff name.
    $query->set( 'order', 'ASC' );
  }
}

Note: I used the is_post_type_archive() function in the conditional tag. It is checking the archive page. See the Codex