You can use pre_get_posts
with a callback:
<?php
defined( 'ABSPATH' ) OR exit;
/** Plugin Name: (#102854) Order Posts by Foo */
add_filter( 'pre_get_posts', 'wpse_102854_orderby_foo' );
function wpse_102854_orderby_foo( $query )
{
if (
! $query->is_main_query()
OR ! is_admin()
OR 'edit.php?post_type=YOUR_POST_TYPE' !== $GLOBALS['parent_file']
// Other conditions that force an abort, Example:
// OR 'foo' !== $query->get( 'some_query_var' )
)
return $query;
$query->set( 'orderby', 'meta_value_num' );
// etc.
return $query;
}