To make a middleware work with a user and keep it available you should be using a custom auth guard. Laravel will then try to find the user and log that user in. In your case, that would just be setting the user to the request and session.
Documentation: https://laravel.com/docs/8.x/authentication#adding-custom-guards
Above is the official way, then you can also reuse the existing auth middleware. Then you also have tools available like auth()->user() and so on.
Another solution is logging in the user by using the facade.
Auth::login($user);
Note that this will set the authenticated user on the default auth middleware. This means the user is also logged in on all other routes that are used in your application with that middleware. I don't think you want this approach
Finally., it's not that bad to retrieve the user twice. It's really a micro-optimization if you're only looking into speed improvements.