How to prevent intermediate images from being created but keep the sizes available for selection in the media library?

Use the intermediate_image_sizes filter and return an empty array:

add_filter( 'intermediate_image_sizes', '__return_empty_array' );

__return_empty_array is a helper function in WordPress, the above is all you need!