Answer your question directly, call some read-model that answers the question that your flight exists from the Command Handler, use dependency injection for passing the service that responds to such question (In the best case, use Functions as dependencies instead of Objects).
CQRS is not about the Command side can't call the Query side, the segregation is so you don't end up with **one class/service/object** doing Commands and Queries. Instead, you have two classes/services/objects.
Aside from that, here is my thought about the topic in general so please understand I will twist your domain to fit what I am trying to explain.
> We obviously don't want to allow reservations to be created for non-existent flights.
Totally understandable but we need to agree about what is "non-existent flights".
The flight could get cancel right after I made the reservation, or something else could happen that would make it a "non-existent flight". So the flight exists at the moment I did. In other cases (this was my case a few weeks ago), people could change the request and send garbage flights ID or the Frontend clients did something wrong with the read-models.
So, what should I do?
1. Trying to mitigate the issue by checking that at least the flight at a given time exists (your case) at the cost of slowing down the reservation system and creating coupling.
2. Take garbage data and do the invariants checking where it matters at the moment it matters.
It may be the case that although somebody made a reservation with the wrong flight because the flight was canceled/removed/whatever, you can propose the customer a new for the exact same price but different time or maybe the exact same time but different flight, I don't know (react to it, think about the business opportunity).
Before you put dependencies for checking such invariant that was done by database foreign keys before (probably), maybe take "garbage" information, do the business invariant closer to where it really matters and react to it from the business.