I just take a quick look at the code and I think there is effectively some performance issues, but as I didn't try it I couldn't say how bad it is.
You didn't make anything wrong cause actually there isn't any proper option to achieve efficiently what you want to do.
The function find_all_function_lines parse every character in the buffer to check the scope_name, so for multi-megabytes files it's a very intensive task.
I already ask for a better way to achieve this in userecho http://sublimetext.userecho.com/feedback/22398-api-enhance-viewget_symbols-to-return-arbitrary-symbol-list/
, fell free to vote for this.
The solution is to have a function that return the Regions containing the scope you look for, something like a find_all_scope('entity.name.function') or get_symbols('entity.name.function').