IMO NIFs won't get you the best of both worlds as they tend to eliminiate the resilient properties of the BEAM.
See http://erlang.org/doc/tutorial/nif.html:
> As a NIF library is dynamically linked into the emulator process, this is the fastest way of calling C-code from Erlang (alongside port drivers). Calling NIFs requires no context switches. But it is also the least safe, because a crash in a NIF brings the emulator down