How do I prefix blog post urls as mysite.com/blog/%postname%/ but allow authors to still be located at mysite.com/authors/%nicename%?

You can set the author base independently by manipulating the $wp_rewrite global:

function wpa55976_author_base() {
    global $wp_rewrite;
    $wp_rewrite->author_base="authors";
    $wp_rewrite->author_structure="https://wordpress.stackexchange.com/" . $wp_rewrite->author_base . '/%author%';

    // EDIT - rewrite rule to force author urls to resolve:
    add_rewrite_rule('authors/([^/]+)/?$', 'index.php?author_name=$matches[1]', 'top');

}
add_action( 'init', 'wpa55976_author_base' );

Make sure to visit your permalinks page to flush rewrites after you add this.

The one thing you won’t get is mysite.com/authors/ = authors archive, as WordPress doesn’t provide this page by default, though you may be able to create an authors page and use a custom template, or add a rewrite rule to handle it.