1. Transaction would be necessary if you want all of the activity to either be committed or rolled back as a single unit. In other words if you insert/udpate the first 3,000 and then get an error on the 3001'st item, and you don't care and will just proceed then no transaction is necessary. However, if you can't insert the 3001'st item and would then not want any of the previous 3000 to still be in the databse then you should use a transaction.
2. Will transaction be quicker? No a transaction will not be quicker, in fact it would be slower because it would retain the lock on any items until all 4000 are completed, as opposed to releasing them after each one. That would only matter if other queries/users might still be trying to touch the table while this bulk load is going on. However, speed usually the issue, its the data quality as expressed in #1. You either need or don't need to use the Transaction, and if you do then you have to live with the performance hit.
3. Depending on how many rows you already have in the table it might make sense to drop your indexes for the table, do your bulk insert, then re-CREATE your indexes. This also depends if the table is still "live" during the bulk loading process. If your system is essentially down during the load, then it would speed up the loading to have the indexes dropped, and then re-create them, since you will want to have them rebuilt after the load anyway. However, if your system is running 24/7 and the 4000 rows are just a drop in the bucket of what the table contains total, then you definitely don't want to do this.