The library approach actually works rather nicely in IDEA 10 (Ultimate), thx for the hint! I think that this might not have been supported in IDEA 9, but I'm not sure.
I put the Ext files into a libs folder inside my project, e.g. [project-dir]/client/libs/ext-3.3.1 and pointed the library source to ../ext-3.3.1/src. I then excluded the complete ext-3.3.1 folder from the project (under Project Settings / Modules / Paths). This way IDEA's JS plugin will parse only the single-file ExtJS sources and not the *-all files (which we know would otherwise lead to multiple lookup and code-completion results).
I came up with the following setup for ExtJS' 'runtime' files, e.g. ext-all.js:
If you use IDEA's web module support putting this and other files inside your web module directory structure will have IDEA automatically parse them which is what we wanted to avoid in the first place.
Therefore I created a 'runtime' subfolder under libs/ext-3.3.1 and copied the relevant JS files plus the resources subfolder (CSS, images) there. Since libs/ext-3.3.1 is excluded from the project anyway, the JS plugin will not parse those files.
In order to have IDEA know that those files will be part of the deployed webapp, you will have to map this directory as a Web Resource Directory in Project Settings / Modules / Web, e.g.
[your-project-dir]/client/libs/ext-3.3.1/runtime -> /ext
IDEA will then know about these files and support e.g. auto-completion of paths to CSS or JS files when editing html files, and furthermore deploy those files when running one of the supported Application Servers (e.g. Tomcat) from within IDEA.