To answer your first Q, if you integrate your existing SFDC org with your new Marketo instance, then given that the sync user has all the required access rights, you'd see all the SFDC custom fields available to map/use as unmapped custom SFDC fields in your new Marketo instance.
2. What is the best approach, is it just letting salesforce sync the data with new instance or migrating data from Marketo to Another Marketo and then turn on the salesforce sync?
When you say data, do you mean lead data, assets in your old Marketo instance, any other data like custom obj/activity, or all the data? Also, are you going to use the same SFDC org that you're currently using, or are you planning to have a new SFDC org too?
In general, migrating to a new Marketo instance is a big overhaul and you should properly plan it to ensure you're able to switch over smoothly. Marketo support can also help you to do a config copy where-in Marketo can copy your existing instances' assets (programs, smart campaigns, lists, landing pages, emails, etc.), but no record data (leads, activities, list/program membership) over to the new instance.
Also, there are many migration-related threads already in the community if you search (like this one).