Short answer- It Depends
Long answer-
It's generally faster to query to 1 row in a single table rather than 20 rows of meta information but there are somethings you should cosider
20 custom meta boxes doesn't mean that there are 20 postmeta values. User might be filling only 5 of them & then that would mean that post meta table is faster
Wordpress automatically queries the post's meta when quering the posts, so that means you're already issuing a database query, even when meta information is in other table. If the information in the custom table is not heavy, it would make more sense to add it to post meta even if it means 20 rows. You could though, ask wp not to query for meta information
Think about when the fields are actually used. Is it used everytime the post is queried? Is it used at multiple places on same page? If yes, it probably is better to let wordpress handle it & use automatic caching. On the other hand if the field is only displayed on single page, it makes more sense to do a separate query just on that page.
This also depends on other things that you don't have much control over such as your server's RAM
If the meta information are articles, then it's best to issue a separate query to another table. If they are small sentences, url's etc. then postmeta will work fine.
The efficient way might even have a mix of postmeta as well as custom table & we can't say that one is better than other without actually knowing the data(which sometimes even the developer doesn't know). I recommend trying out both methods & see what works best for you
wp_postmeta
by default so I wouldn't worry about that.