A page that list all the nodes by views but to have a one CMS controlled banner image on that page I have created a views page which list maximum of 50 nodes of type 'event'. It works fine but I want have a single image banner on the top that can be uploaded by the logged in user from the admin area for that page. I can't add a banner field on the event content type as it will get pulled 50 times. 

The other solution I managed was to create another content type called 'Banner image' and create another view which lists 1 node of event type 'Banner image' and add it to the initial page view but that seems like a really dirty solution. Is there a simpler solution to this problem?
Create a admin form that allows the admin user to upload the image file, as you say in your question.
Create custom block that renders the image as you want. You can do in a custom module (better, more solid) or crete the block using the GUI and add the HTML code. In both cases, the img should point the file uploaded by the admin form.
Place the block over your view in the view's page.


This is good if:


You only have one view that needs the header image.
That image is the same for evey user.