Make attachment pages require a base url

Endpoints are for adding extra query vars to existing routes, I think you just want a vanilla rewrite rule here:

function wpd_media_image_rewrite_rule() {
    add_rewrite_rule(
        '^image/([^/]*)/?',
        'index.php?post_type=attachment&name=$matches[1]',
        'top'
    );
}
add_action( 'init', 'wpd_media_image_rewrite_rule' );

You might want to loop over valid mime-types there and add a rule for each. You also need to flush rewrites for this to start working, but don’t use flush_rewrite_rules on init like in your example above. Rules should only be flushed when they change. A quick way to flush them is to just visit the permalinks settings page.

You’ll also need to filter at least attachment_link to output the correct URL for unattached media, like:

function wpd_media_image_att_link( $link, $post_id ){
    $post = get_post( $post_id );
    if( 0 == $post->post_parent ){
        $link = home_url( user_trailingslashit( 'image/' . $post->post_name ) );
    }
    return $link;
}
add_filter( 'attachment_link', 'wpd_media_image_att_link', 10, 2 );

Here we check if the attachment doesn’t have a parent, because if it’s attached to a post, it would be a child of the parent post. You could also check mime-type here and make the image/ part dynamic according to type.

There’s also the wp_get_attachment_link function which may need a filter, if that’s used in the template somewhere. I don’t think core admin uses that function anywhere though, but I may be wrong.