BeginUploadFromStream будет более эффективным, поскольку он использует модель асинхронного программирования, которая не будет использовать ресурсы ЦП во время ввода-вывода. Если вы раскручиваете BackgroundWorker и вызываете любой из методов, не относящихся к APM, вы по сути тратите этот поток, в то время как происходит чтение с диска и запись в сеть.
В .NET вы почти всегда хотите использовать модель APM, когда она доступна для максимальной эффективности.