You cannot do anything to increase that speed! Not because there is not a better solution, but because the process relies on the network resources too. Your internet bandwidth is going to play a very vital role in sending the emails through a remote SMTP server.
Typically, sending one email from a desktop application takes ~2 seconds (You can try that out yourself but sending one email to your own email address using an SMTP server;
Sending emails over .NET framework, and general problems – using C# code[
^]). So what is going to happen is that you are going to multiply 2 seconds (of average) with 50,000 clients.
There are many ways around this:
1. Consider increasing the bandwidth of your network connection.
2. Use the best possible way to iterate over the collection.
3. Do not generate the PDF again and again, use caching for this.
So on. But, basically, the thing boils down to saying, for such an action you are going to use a service from a third-party company who send the emails on your behalf to 50,000 clients using an email message, an email attachment and so on. Why? Because it would cost you a lot of money to upgrade the systems just to make the email sending process easy.