Yes, this is possible as described here:
https://github.com/grafana/grafana/pull/10050
Grafana will automatically combine results of multiple queries into the same row if all the labels match.
In order for all the labels to match up, you need to exclude the __name__ label since that's different. One way to do that is to just add 0 to the query, which causes the __name__ label to be dropped, eg:
bird_protocol_up{instance="r1",ip_version="4",job="sd_bird_exporter",name="ACX_R1",proto="BGP"}+0
bird_protocol_uptime{instance="r1",ip_version="4",job="sd_bird_exporter",name="ACX_R1",proto="BGP"}+0
Or you can use the sum aggregator:
sum(bird_protocol_up) by (instance, ip_version, name)
sum(bird_protocol_uptime) by (instance, ip_version, name)
There may be better ways of doing this that I'm not aware of.