Hi Nguyen,
1. Even thought the workflow will has impact on lead entity, but if a lead record not meet check conditions, then following steps will skip.
E.g: this demo lead record is still owned by current user due to Source journey and Existing contact fields are empty.

A background workflow won't take up many system resource, so please feel free to run it at background. (What's more, if conditions not meet, then less resource will be used.)
2. Obviously the ideal solution is that as you said, just using "Launch workflow", even if this type or workflow can only target at contact entity,
but you can find its child lead record(make sure you have added "Create new lead" tile before "Launch workflow" tile) from contact context.
Process:
* On-demand workflow get contact id from context
* Use this id to retrieve lead who has this parent contact
* Do assignment by changing lead's owner field to its parent contact's owner from context
It can be done with a custom workflow activity.
I'm trying to use Dynamics 365 workflow tool: update child record to achieve it without code, however, it seems that the step only supports text field.
I'm new to custom workflow activity and couldn't give you a solution with code immediately.
You could take tutorial below as reference for how to build a custom workflow activity and add it into system:
https://www.ashishvishwakarma.com/Custom-Workflow-Activity-Dynamics-365/
In a word, I think solution 1 could work for your requirement at present; we need some time to achieve solution 2, once we get familiar with code, then we can replace 1 with 2.
Regards,
Clofly
Please kindly mark as verified if you had any answer helped, it would be really appreciated.