Castle DynamicProxy is limited by the polymorphism features of .NET. This means either an interface proxy which is effectively a decorator around your implementation class, or a class proxy which subclasses your implementation class and overrides virtual methods.
One other option, would be some kinda post-compilation IL-weaving that adds the behavior to the IL. This would ultimately look like your second suggestion, except it's being done by a program and not the programmer. Look into http://www.postsharp.net/