Transfering a table with millions of rows in a fast efficient way without blocking
Are there any solutions more efficient than simple INSERT INTO or
  exporting and importing files to move millions of rows from a table
  with 3 columns to a similar table in another database,


Your best bet for this is going to be SSIS. 


  without blocking the destination database 


Inserting into one table won't block the database, but it will cause blocking on the table to one degree or another. The length and severity of the blocking will largely be determined by the number of indexes and how well they suit your queries.

If you want to reduce blocking, insert data in smaller chunks. I usually go for around 1000 rows at a time to avoid lock escalation.

Another way to reduce blocking is to use an optimistic isolation level on queries that read data from the able.


  and not losing any of the records in transactions that can be rolled
  back in case of failure?


This is another reason why smaller batches is a good idea. It will make it easier for you to figure out the offending row, retry the transaction, etc. 

There are also some neat trick shots in this post, by Michael Swart: Modifying Tables Online – Part 1: Migration Strategy