We looked at doing this in a single lookup as you did. With one or two currencies this can be potentially more efficient. As the number of supported currencies and addresses under a single name grows, however, this solution becomes potentially more problematic. Please follow the use cases below:
Use case 1: Wallet Name = "bob.foo.bar" or OpenAlias = "bob.foo.bar"
The only currency supported is bitcoin, and there are no colored coin formats supported.
OpenAlias case:
1 packet lookup to "bob.foo.bar"
1 packet response with bitcoin address
= 2 packets
Wallet Name case:
1 packet lookup to "_wallet.bob.foo.bar"
1 packet response with supported address types
1 packet lookup to "_btc._wallet.bob.foo.bar"
1 packet response with bitcoin address
= 4 packets
Wallet Name Case 1a:
The wallet doing the lookup knows it wants bitcoin, so it skips the supported addresses lookup
1 packet lookup to "_btc._wallet.bob.foo.bar"
1 packet response with bitcoin address
= 2 packets
In this use case we might create more traffic, but it could also be reduced by doing smart lookups.
Use case 2: Wallet Name = "bob.foo.bar" or OpenAlias = "bob.foo.bar"
Many currencies and colored coin addresses are supported under the same name, lets say 100. When you count different currencies and colored coin types, it could easily be hundreds, or over a thousand.
OpenAlias case:
1 packet lookup to "bob.foo.bar"
100 packet responses with various addresses
= 101 packets
Wallet Name case:
1 packet lookup to "_wallet.bob.foo.bar"
1 packet response with supported address types
1 packet lookup to "_btc._wallet.bob.foo.bar"
1 packet response with bitcoin address
= 4 packets
Wallet Name Case 2a:
The wallet doing the lookup knows it wants bitcoin, so it skips the supported addresses lookup
1 packet lookup to "_btc._wallet.bob.foo.bar"
1 packet response with bitcoin address
= 2 packets
While you may end doing "less lookups" under Open Alias, as it scales, you end up causing a significant amount of extra, unnecessary traffic.
In addition to the obvious impact of being orders of magnitude more wasteful than necessary, it also creates privacy "leakage" by returning someone 100 different addresses when they only asked for one.
Finally, because a single packet UDP transaction for a DNS lookup can create possibly hundreds of packets in response, the service can essentially become an amplifier for DDoS attacks. (If I spoof the source address of my target with a query to a lookup that issues hundreds of packets in response to one packet, and I can have a real impact :( )