Custom post type archive not regarding ‘posts_per_page’ => -1

WP_Query is for secondary loops. That is to say that it’s completely independent from the page’s default $wp_query. I suspect that it’s not working because you aren’t referencing your new WP_Query object on the loop. To do that, you’d do this:

if( $all_sports->have_posts() ) : while( $all_sports->have_posts() ) : $all_sports->the_post();
    // do stuff
endwhile; endif;

HOWEVER, you shouldn’t do that!

Instead, this is a perfect use of the pre_get_posts action. That action can be used to modify the default query on any page without any changes to the page template. Seeing that you’re simply wanting to modify the default custom post type archive query, that’s what you want. Here’s some untested code that should probably do the trick:

add_action( 'pre_get_posts', 'wpse163734_pre_get_post' );
function wpse163734_pre_get_post( $query ) {

    if( is_post_type_archive( 'cpt_sports' ) && !is_admin() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', -1 );
        $query->set( 'orderby', 'menu_order' );
    }

}

All the other arguments you give to WP_Query are defaults of a custom post type archive page query so you don’t need to modify them.