Your issue isn't BGP. If you can get IP connectivity, you can get BGP running.
Instead, your issue is that IP unnumbered is for use on point-to-point interfaces, not shared segments. If you wanted to set aside specific VLAN tags for the transit links between R[1-3] and R[4-5] you could use unnumbered, and would generally base it on a loopback (not necessary, but probably the most typical). Put another way - VLAN A would include [R1,R4], VLAN B would be [R1,R5], VLAN C would be [R2,R4], VLAN D [R2,R5], etc.
That said, if you set aside different VLAN's for each link then you wouldn't have to worry about any kind of conversation between R4 and R5.
If you want to run on a shared segment then you'll need some kind of addressing to disambiguate what traffic is bound to where. If you want to keep clients from talking to one another on this shared segment then you'll need some mechanism at L2 - likely PVLAN, but I suppose there are other (likely more labor-intensive) ways to accomplish this.
For what it's worth the problem you're describing is pretty common in a lot of IX's: tons of routers from different organizations on a shared IP segment that should only be allowed to talk to one another according to a very specific (if frequently changing) set of rules. Based on your design and the requirement to keep R4 and R5 independent I would look in this direction if I were you.