This answer was actually from @eggyal (left as a comment) but then he deleted the answer and never came back.
Anyway, I want to share his answer because it was extremelly useful. Maybe something too simple, but I just didn't have an idea I could just do that:
create table `new_table` select * from `other_table`
And I can even do something like:
create table `new_table` select SQL_CALC_FOUND_ROWS * from `other_table` limit 50;
select found_rows();
Which is simply great!
The speed is great and I don't even need to worry about the fields data type, MySQL does it automatically based on the passed query.
@eggyal: If you ever come back to this post, please feel free to add your answer and I'll select it. Thanks for your comment!
Francisco