WordPress 6.x / PHP 8.x deprecated warnings in development environment

The key to the solution is enable_wp_debug_mode_checks filter but to use it you have to do something special.

As the documentation says:

This filter runs before it can be used by plugins. It is designed for
non-web runtimes. Returning false causes the WP_DEBUG and related
constants to not be checked and the default PHP values for errors will
be used unless you take care to update them yourself.

To use this filter you must define a $wp_filter global before
WordPress loads, usually in wp-config.php.

Then when you disable this default error reporting overwrite – you can set your own.
So the final solution looks like this:

define('WP_DEBUG', true);

if (WP_DEBUG) {
  define('WP_DEBUG_LOG', true);
  define('WP_DEBUG_DISPLAY', true);

  // disable friendly non informative error messages
  define('WP_DISABLE_FATAL_ERROR_HANDLER', true);

  $GLOBALS['wp_filter'] = [
    'enable_wp_debug_mode_checks' => [
      10 => [[
        'accepted_args' => 0,
        'function'      => function() { return false; },
      ]],
    ],
  ];
}

error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);

Unfortunately it turns off automatically also deprecated messages from your own code, but what can you do until WordPress solves its deprecated code fragments.