Facebook keeps a public directory [1] of every account which hasn't opted out (somewhere in the settings).
I don't own a Facebook account so I can't tell you where to change this setting.
If that sounds familiar to you it might be because Ron Bowes crawled this directory a couple of years ago [2]
However it got a log bigger since then, so I decided to get a copy of it myself.
It took about two weeks and a lot of bandwidth to accomplish that therefore I'm not recomending you to do it youself.
That's why I'm sharing it here in the first place.

You'll find two compressed archives in the torrent.
raw.tar.xz contains all data I've crawled
Here's an example of Mark Zuckerberg's (yes he's in there) data to get an idea of the format.

Code:

zuck;Mark Zuckerberg

"zuck" is the Facebook alias, username or whatever they call it.
"Mark Zuckerberg" is of course the name.
If no alias is set then the first column is the ID of the account.

processed.tar.xz
First I used names from the names and names non-latin directory which only had one space.
Then I split them into first and lastnames, counted the occurrence and finnaly sorted them.
The result looks like this:

Thanks for the feedback and I'm glad you like it!
ati6990: you're willkommen

All I did was doing a lot of HTTP GET requests on a public part of facebook.com, parsing the result and store them into files.
I want to make that clear before anyone (not from this community) is accusing me of "hacking" Facebook.
I'll write more about it in a later post.

Take a look at the picture in the attachment and guess when atom tweeted the link to this post. (that's megaBYTES per second)
Whoever caused the spike: nicely done and I hope you'll seed the torrent as long as you can!

Back to the directory...
The crawling was done during the first two weeks in December 2014.
I've also got the data from the pages and places but they are only included in the raw.tar.xz archive since I didn't processed them further.
The latin names where converted to lowercase before the sorting.
I didn't do that for the nonlatin names because I wasn't sure if it would break the UTF-8 characters.
If anyone knows more about it, please post it here.

Here are some commands to deal with the dataset.
For Windows users there is cygwin but I recommend you to take a look at a unix based OS.

Get rid of the count in the processed files (so you can use it as a dictionary)

Code:

$ cut -b9- first_names.txt > first_names.dic

Get a list of usernames and exclude the ones which are IDs

Code:

$ cut -d";" -f1 names/fbdata.* | awk '! /^[0-9]+$/' > usernames.txt

Repeat that for the non-latin, pages and places. The output should already be unique.