Efficiency can mean a lot of different things, do you mean efficient to you as a dev (least lines of code?) or efficient to the user (loading the quickest etc).
In any case, template_include fires AFTER WordPress has determined what template it should load, but before it loads it, so WP has already done the 'work' to determine the appropriate template, then you add in your function to take it in another direction. Depending on what you're trying to achieve, you'd be better off either..
Utilising the built in page templates system -
http://codex.wordpress.org/Page_Templates
Basically what @Milo mentioned here
- In order to offer more flexibility you can create a 'parent'
template and call subsections using get_template_part() based
off of conditional variables (such as theme options, current page
etc) While you can do the same thing with template filters and load
an entirely new template, you probably only need to change certain
sections of the template, so loading these using get_template_part() allows for more reuse of code etc