To create a cloud mask for S2 data you can have a look in this thread, it is answered there.
Afterwards you can collocate the S2 and L8 products. By doing this you’ve merged both in one product.
Now you can define new bands by Band Maths. Use an expression like:
s2_cloudy_flag ? L8_Band : S2_Band
Make sure to create real bands and not virtual bands.
Now you can define a subset and remove all original bands you don’t need any more.
There might be some obstacles I don’t see right now. E.g. it might be necessary to create a mosaic of multiple L8 first, to cover the whole S2 scene, or vice versa.