I'm going to ignore the physical jamming possibilities and focus only jamming by "abusing" the protocol, thus by sending packets.
If you want to block the incoming SMS or call-setups then you are definitely out of luck. This kind of data is send over a channel that is used to send data to all cellphones in the coverage area. You could however interrupt an ongoing call as each call receives it's own channel (though they often swap from channel to channel over time but this can be accounted for) and as such sending data over this channel will create collisions and thus hinder the ongoing call.
To block a phone from sending SMS or making a call we need to interrupt the shared channel that all cellphones use to send data to the transmission tower. There are two common access protocols used for this, Time Division Multiple Access (TDMA, used in 2G for example) and Code Division Multiple Access (CDMA, used in 3G for example). Both obviously require a different approach, I won't go into details but will explain the general idea. These approaches can also be combined which would require for the methods below to be combined.
This divides the channel into frames, these are just fixed length periods of time. These frames are then divided into time-slots. Each cellphone receives one time-slot per frame and can use that to send SMS or request a call setup.
Abusing this system just requires you to send data during the correct time-slots. This will create collisions when this cellphone tries to send something.
This one is a little more complex. Each user gets a seed to a pseudorandom number sequence, when the user sends data it XOR's its data with the pseudorandom number sequence. To jam the cellphone in this case requires you to determine the seed and then jam by sending data using the pseudorandom number sequence.
This should give a general idea of potential weaknesses that could be exploited, however to use these in a real world test one will have to check how different phones will react to these situations.